/* intl-tel-input version: 0.9.2 description: A jQuery plugin for entering international telephone numbers repository: https://github.com/Bluefieldscom/intl-tel-input.git license: MIT author: Jack O'Connor (http://jackocnr.com) */ (function($, window, document, undefined) { var pluginName = "intlTelInput", defaults = { preferredCountries: [ "in", "us" ], // united states and united kingdom initialDialCode: true, americaMode: false, onlyCountries: [] }; function Plugin(element, options) { this.element = element; this.options = $.extend({}, defaults, options); this._defaults = defaults; this._name = pluginName; this.init(); } Plugin.prototype = { init: function() { var that = this; // process onlyCountries array and update intlTelInput.countries // and intlTelInput.countryCodes accordingly if (this.options.onlyCountries.length > 0) { var newCountries = [], newCountryCodes = {}; $.each(this.options.onlyCountries, function(i, countryCode) { var countryData = that._getCountryData(countryCode); if (countryData) { newCountries.push(countryData); var callingCode = countryData["calling-code"]; if (newCountryCodes[callingCode]) { newCountryCodes[callingCode].push(countryCode); } else { newCountryCodes[callingCode] = [ countryCode ]; } } }); // update the global data object intlTelInput.countries = newCountries; intlTelInput.countryCodes = newCountryCodes; } // process preferred countries - iterate through the preferences, // finding the relevant data from the provided intlTelInput.countries array var preferredCountries = []; $.each(this.options.preferredCountries, function(i, countryCode) { var countryData = that._getCountryData(countryCode); if (countryData) { preferredCountries.push(countryData); } }); this.defaultCountry = preferredCountries.length ? preferredCountries[0] : intlTelInput.countries[0]; // telephone input this.telInput = $(this.element); // if initialDialCode is enabled, insert the default dial code if (this.options.initialDialCode && this.telInput.val() === "") { this.telInput.val("+" + this.defaultCountry["calling-code"] + "-");//removed space after code } // containers (mostly for positioning) this.telInput.wrap($("
", { "class": "intl-tel-input" })); var flagsContainer = $("
", { "class": "flag-dropdown f16" }).insertBefore(this.telInput); // currently selected flag (displayed to left of input) var selectedFlag = $("
", { "class": "selected-flag" }).appendTo(flagsContainer); // here we default to the first country in the list var firstCountry = this.defaultCountry.cca2; this.selectedFlagInner = $("
", { "class": "flag " + firstCountry }).appendTo(selectedFlag); // CSS triangle $("
", { "class": "down-arrow" }).appendTo(this.selectedFlagInner); // country list contains: preferred countries, then divider, then all countries this.countryList = $("
    ", { "class": "country-list hide" }).appendTo(flagsContainer); if (preferredCountries.length) { this._appendListItems(preferredCountries, "preferred"); $("
  • ", { "class": "divider" }).appendTo(this.countryList); } this._appendListItems(intlTelInput.countries, ""); this.countryListItems = this.countryList.children(".country"); // auto select the top one this.countryListItems.first().addClass("active"); // update flag on keyup // (by extracting the dial code from the input value) this.telInput.keyup(function() { var countryCode, alreadySelected = false; // try and extract valid dial code from input var dialCode = that._getDialCode(that.telInput.val()); if (dialCode) { // check if one of the matching country's is already selected var countryCodes = intlTelInput.countryCodes[dialCode]; $.each(countryCodes, function(i, c) { if (that.selectedFlagInner.hasClass(c)) { alreadySelected = true; } }); countryCode = countryCodes[0]; } else { var countryCodes = intlTelInput.countryCodes[dialCode]; $.each(countryCodes, function(i, c) { if (that.selectedFlagInner.hasClass(c)) { alreadySelected = true; } }); countryCode = countryCodes[0]; } if (!alreadySelected) { that._selectFlag(countryCode); } }); // trigger it now in case there is already a number in the input this.telInput.keyup(); // toggle country dropdown on click selectedFlag.click(function(e) { // prevent the click-off-to-close listener from firing e.stopPropagation(); // toggle dropdown if (that.countryList.hasClass("hide")) { // update highlighting and scroll to active list item that.countryListItems.removeClass("highlight"); var activeListItem = that.countryList.children(".active").addClass("highlight"); // show it that.countryList.removeClass("hide"); that._scrollTo(activeListItem); // listen for typing $(document).bind("keydown.intlTelInput", function(e) { // up (38) and down (40) to navigate if (e.which == 38 || e.which == 40) { var current = that.countryList.children(".highlight").first(); var next = e.which == 38 ? current.prev() : current.next(); if (next) { // skip the divider if (next.hasClass("divider")) { next = e.which == 38 ? next.prev() : next.next(); } that.countryListItems.removeClass("highlight"); next.addClass("highlight"); that._scrollTo(next); } } else if (e.which == 13) { var currentCountry = that.countryList.children(".highlight").first(); if (currentCountry.length) { that._selectListItem(currentCountry); } } else if (e.which == 9 || e.which == 27) { that._closeDropdown(); } else if (e.which >= 97 && e.which <= 122 || e.which >= 65 && e.which <= 90) { var letter = String.fromCharCode(e.which); // filter out the countries beginning with that letter var countries = that.countryListItems.filter(function() { return $(this).text().charAt(0) == letter && !$(this).hasClass("preferred"); }); if (countries.length) { // if one is already highlighted, then we want the next one var highlightedCountry = countries.filter(".highlight").first(); var listItem; // if the next country in the list also starts with that letter if (highlightedCountry && highlightedCountry.next() && highlightedCountry.next().text().charAt(0) == letter) { listItem = highlightedCountry.next(); } else { listItem = highlightedCountry.next(); } // update highlighting and scroll that.countryListItems.removeClass("highlight"); listItem.addClass("highlight"); that._scrollTo(listItem); } } }); } else { // close it that._closeDropdown(); } }); // when mouse over a list item, remove any highlighting from any other items this.countryListItems.mouseover(function() { that.countryListItems.removeClass("highlight"); $(this).addClass("highlight"); }); // listen for country selection this.countryListItems.click(function(e) { var listItem = $(e.currentTarget); that._selectListItem(listItem); }); // click off to close $("html").click(function(e) { if (!$(e.target).closest(".country-list").length) { // close it that._closeDropdown(); } }); }, // find the country data for the given country code _getCountryData: function(countryCode) { for (var i = 0; i < intlTelInput.countries.length; i++) { if (intlTelInput.countries[i].cca2 == countryCode) { return intlTelInput.countries[i]; } } }, // update the selected flag and the active list item _selectFlag: function(countryCode) { this.selectedFlagInner.attr("class", "flag " + countryCode); // and the active list item this.countryListItems.removeClass("active"); var listItem = this.countryListItems.children(".flag." + countryCode).parent(); listItem.addClass("active"); return listItem; }, // update the selected flag, and insert the dial code selectCountry: function(countryCode) { // check if already selected if (!this.selectedFlagInner.hasClass(countryCode)) { var listItem = this._selectFlag(countryCode); var dialCode = listItem.attr("data-dial-code"); this.telInput.val("+" + dialCode + ""); } }, // called when the user selects a list item from the dropdown _selectListItem: function(listItem) { var countryCode = listItem.attr("data-country-code"); // update selected flag this.selectedFlagInner.attr("class", "flag " + countryCode); // update input value var newNumber = this._updateNumber(this.telInput.val(), listItem.attr("data-dial-code")); this.telInput.val(newNumber); // hide dropdown again this._closeDropdown(); // focus the input this.telInput.focus(); // mark the list item as active (incase they open the dropdown again) this.countryListItems.removeClass("active highlight"); listItem.addClass("active"); }, // close the dropdown and unbind any listeners _closeDropdown: function() { this.countryList.addClass("hide"); $(document).unbind("keydown.intlTelInput"); }, // check if an element is visible within it's container, else scroll until it is _scrollTo: function(element) { var container = this.countryList; var containerHeight = container.height(); var containerTop = container.offset().top; var containerBottom = containerTop + containerHeight; var elementHeight = element.outerHeight(); var elementTop = element.offset().top; var elementBottom = elementTop + elementHeight; var newScrollTop = elementTop - containerTop + container.scrollTop(); if (elementTop < containerTop) { // scroll up container.scrollTop(newScrollTop); } else if (elementBottom > containerBottom) { // scroll down var heightDifference = containerHeight - elementHeight; container.scrollTop(newScrollTop - heightDifference); } }, // replace any existing dial code with the new one _updateNumber: function(inputVal, dialCode) { var prevDialCode = "+" + this._getDialCode(inputVal); var newDialCode = "+" + dialCode; var newNumber; // if the previous number contained a valid dial code, replace it // (if more than just a plus character) if (prevDialCode.length > 1) { newNumber = inputVal.replace(prevDialCode, newDialCode); // if the old number was just the dial code, // then we will need to add the space again if (inputVal == prevDialCode) { newNumber += "-"; } } else if (inputVal.length && inputVal.substr(0, 1) != "+") { // previous number didn't contain a dial code, so persist it newNumber = newDialCode + " " + inputVal.trim(); } else { // previous number contained an invalid dial code, so wipe it newNumber = newDialCode + "-"; } // if americaMode is enabled, we dont display the dial code for american numbers if (this.options.americaMode && newNumber.substring(0, 3) == "+91") { newNumber = newNumber.substring(3); } return newNumber; }, // try and extract a valid international dial code from a full telephone number _getDialCode: function(inputVal) { var firstPart = inputVal.trim().split(" ")[0]; // only interested in international numbers (starting with a plus) if (firstPart.substring(0, 1) == "+") { // strip out non-numeric chars (e.g. pluses, spaces, brackets) // and grab the first 4 numbers (max length of a dial code is 4) var dialCode = firstPart.replace(/\D/g, "").substring(0, 4); // try first 4 digits, then 3, then 2, then 1... for (var i = dialCode.length; i > 0; i--) { dialCode = dialCode.substring(0, i); // if we find a match (a valid dial code), then return the dial code if (intlTelInput.countryCodes[dialCode]) { return dialCode; } } } return ""; }, // add a country
  • to the countryList
      container _appendListItems: function(countries, className) { // we create so many DOM elements, I decided it was faster to build a temp string // and then add everything to the DOM in one go at the end var tmp = ""; // for each country $.each(countries, function(i, c) { // open the list item tmp += "
    • "; // add the flag tmp += "
      "; // and the country name and dial code tmp += "" + c.name + ""; tmp += "+" + c["calling-code"] + ""; // close the list item tmp += "
    • "; }); this.countryList.append(tmp); } }; // adapted to allow public functions // using https://github.com/jquery-boilerplate/jquery-boilerplate/wiki/Extending-jQuery-Boilerplate $.fn[pluginName] = function(options) { var args = arguments; // Is the first parameter an object (options), or was omitted, // instantiate a new instance of the plugin. if (options === undefined || typeof options === "object") { return this.each(function() { if (!$.data(this, "plugin_" + pluginName)) { $.data(this, "plugin_" + pluginName, new Plugin(this, options)); } }); } else if (typeof options === "string" && options[0] !== "_" && options !== "init") { // Cache the method call to make it possible to return a value var returns; this.each(function() { var instance = $.data(this, "plugin_" + pluginName); // Tests that there's already a plugin-instance // and checks that the requested public method exists if (instance instanceof Plugin && typeof instance[options] === "function") { // Call the method of our plugin instance, // and pass it the supplied arguments. returns = instance[options].apply(instance, Array.prototype.slice.call(args, 1)); } }); // If the earlier cached method gives a value back return the value, // otherwise return this to preserve chainability. return returns !== undefined ? returns : this; } }; })(jQuery, window, document); // Namespaced to prevent clashes var intlTelInput = { // Array of country objects for the flag dropdown. // Each contains a name, country code (ISO 3166-1 alpha-2) and dial code. // Originally from https://github.com/mledoze/countries // then stripped down by copying the JSON into Chrome dev tools and manipulating it // and then using JSON.stringify to print it out as a string again and copy it here. // Also commented some countries which we dont yet have flags for. countries: [ { name: "Afghanistan", cca2: "af", "calling-code": "93" }, { name: "Albania", cca2: "al", "calling-code": "355" }, { name: "Algeria", cca2: "dz", "calling-code": "213" }, { name: "American Samoa", cca2: "as", "calling-code": "1684" }, { name: "Andorra", cca2: "ad", "calling-code": "376" }, { name: "Angola", cca2: "ao", "calling-code": "244" }, { name: "Anguilla", cca2: "ai", "calling-code": "1264" }, { name: "Antigua and Barbuda", cca2: "ag", "calling-code": "1268" }, { name: "Argentina", cca2: "ar", "calling-code": "54" }, { name: "Armenia", cca2: "am", "calling-code": "374" }, { name: "Aruba", cca2: "aw", "calling-code": "297" }, { name: "Australia", cca2: "au", "calling-code": "61" }, { name: "Austria", cca2: "at", "calling-code": "43" }, { name: "Azerbaijan", cca2: "az", "calling-code": "994" }, { name: "Bahamas", cca2: "bs", "calling-code": "1242" }, { name: "Bahrain", cca2: "bh", "calling-code": "973" }, { name: "Bangladesh", cca2: "bd", "calling-code": "880" }, { name: "Barbados", cca2: "bb", "calling-code": "1246" }, { name: "Belarus", cca2: "by", "calling-code": "375" }, { name: "Belgium", cca2: "be", "calling-code": "32" }, { name: "Belize", cca2: "bz", "calling-code": "501" }, { name: "Benin", cca2: "bj", "calling-code": "229" }, { name: "Bermuda", cca2: "bm", "calling-code": "1441" }, { name: "Bhutan", cca2: "bt", "calling-code": "975" }, { name: "Bolivia", cca2: "bo", "calling-code": "591" }, { name: "Bosnia and Herzegovina", cca2: "ba", "calling-code": "387" }, { name: "Botswana", cca2: "bw", "calling-code": "267" }, { name: "Brazil", cca2: "br", "calling-code": "55" }, { name: "Brunei Darussalam", cca2: "bn", "calling-code": "673" }, { name: "Bulgaria", cca2: "bg", "calling-code": "359" }, { name: "Burkina Faso", cca2: "bf", "calling-code": "226" }, { name: "Burundi", cca2: "bi", "calling-code": "257" }, { name: "Cambodia", cca2: "kh", "calling-code": "855" }, { name: "Cameroon", cca2: "cm", "calling-code": "237" }, { name: "Canada", cca2: "ca", "calling-code": "1" }, { name: "Cape Verde", cca2: "cv", "calling-code": "238" }, { name: "Cayman Islands", cca2: "ky", "calling-code": "1345" }, { name: "Central African Republic", cca2: "cf", "calling-code": "236" }, { name: "Chad", cca2: "td", "calling-code": "235" }, { name: "Chile", cca2: "cl", "calling-code": "56" }, { name: "China", cca2: "cn", "calling-code": "86" }, { name: "Colombia", cca2: "co", "calling-code": "57" }, { name: "Comoros", cca2: "km", "calling-code": "269" }, { name: "Congo (DRC)", cca2: "cd", "calling-code": "243" }, { name: "Congo (Republic)", cca2: "cg", "calling-code": "242" }, { name: "Cook Islands", cca2: "ck", "calling-code": "682" }, { name: "Costa Rica", cca2: "cr", "calling-code": "506" }, { name: "Côte d'Ivoire", cca2: "ci", "calling-code": "225" }, { name: "Croatia", cca2: "hr", "calling-code": "385" }, { name: "Cuba", cca2: "cu", "calling-code": "53" }, { name: "Cyprus", cca2: "cy", "calling-code": "357" }, { name: "Czech Republic", cca2: "cz", "calling-code": "420" }, { name: "Denmark", cca2: "dk", "calling-code": "45" }, { name: "Djibouti", cca2: "dj", "calling-code": "253" }, { name: "Dominica", cca2: "dm", "calling-code": "1767" }, { name: "Dominican Republic", cca2: "do", "calling-code": "1809" }, { name: "Ecuador", cca2: "ec", "calling-code": "593" }, { name: "Egypt", cca2: "eg", "calling-code": "20" }, { name: "El Salvador", cca2: "sv", "calling-code": "503" }, { name: "Equatorial Guinea", cca2: "gq", "calling-code": "240" }, { name: "Eritrea", cca2: "er", "calling-code": "291" }, { name: "Estonia", cca2: "ee", "calling-code": "372" }, { name: "Ethiopia", cca2: "et", "calling-code": "251" }, { name: "Faroe Islands", cca2: "fo", "calling-code": "298" }, { name: "Fiji", cca2: "fj", "calling-code": "679" }, { name: "Finland", cca2: "fi", "calling-code": "358" }, { name: "France", cca2: "fr", "calling-code": "33" }, { name: "French Polynesia", cca2: "pf", "calling-code": "689" }, { name: "Gabon", cca2: "ga", "calling-code": "241" }, { name: "Gambia", cca2: "gm", "calling-code": "220" }, { name: "Georgia", cca2: "ge", "calling-code": "995" }, { name: "Germany", cca2: "de", "calling-code": "49" }, { name: "Ghana", cca2: "gh", "calling-code": "233" }, { name: "Gibraltar", cca2: "gi", "calling-code": "350" }, { name: "Greece", cca2: "gr", "calling-code": "30" }, { name: "Greenland", cca2: "gl", "calling-code": "299" }, { name: "Grenada", cca2: "gd", "calling-code": "1473" }, { name: "Guadeloupe", cca2: "gp", "calling-code": "590" }, { name: "Guam", cca2: "gu", "calling-code": "1671" }, { name: "Guatemala", cca2: "gt", "calling-code": "502" }, { name: "Guernsey", cca2: "gg", "calling-code": "44" }, { name: "Guinea", cca2: "gn", "calling-code": "224" }, { name: "Guinea-Bissau", cca2: "gw", "calling-code": "245" }, { name: "Guyana", cca2: "gy", "calling-code": "592" }, { name: "Haiti", cca2: "ht", "calling-code": "509" }, { name: "Honduras", cca2: "hn", "calling-code": "504" }, { name: "Hong Kong", cca2: "hk", "calling-code": "852" }, { name: "Hungary", cca2: "hu", "calling-code": "36" }, { name: "Iceland", cca2: "is", "calling-code": "354" }, { name: "India", cca2: "in", "calling-code": "91" }, { name: "Indonesia", cca2: "id", "calling-code": "62" }, { name: "Iran", cca2: "ir", "calling-code": "98" }, { name: "Iraq", cca2: "iq", "calling-code": "964" }, { name: "Ireland", cca2: "ie", "calling-code": "353" }, { name: "Isle of Man", cca2: "im", "calling-code": "44" }, { name: "Israel", cca2: "il", "calling-code": "972" }, { name: "Italy", cca2: "it", "calling-code": "39" }, { name: "Jamaica", cca2: "jm", "calling-code": "1876" }, { name: "Japan", cca2: "jp", "calling-code": "81" }, { name: "Jersey", cca2: "je", "calling-code": "44" }, { name: "Jordan", cca2: "jo", "calling-code": "962" }, { name: "Kazakhstan", cca2: "kz", "calling-code": "7" }, { name: "Kenya", cca2: "ke", "calling-code": "254" }, { name: "Kiribati", cca2: "ki", "calling-code": "686" }, { name: "Kuwait", cca2: "kw", "calling-code": "965" }, { name: "Kyrgyzstan", cca2: "kg", "calling-code": "996" }, { name: "Laos", cca2: "la", "calling-code": "856" }, { name: "Latvia", cca2: "lv", "calling-code": "371" }, { name: "Lebanon", cca2: "lb", "calling-code": "961" }, { name: "Lesotho", cca2: "ls", "calling-code": "266" }, { name: "Liberia", cca2: "lr", "calling-code": "231" }, { name: "Libya", cca2: "ly", "calling-code": "218" }, { name: "Liechtenstein", cca2: "li", "calling-code": "423" }, { name: "Lithuania", cca2: "lt", "calling-code": "370" }, { name: "Luxembourg", cca2: "lu", "calling-code": "352" }, { name: "Macao", cca2: "mo", "calling-code": "853" }, { name: "Macedonia", cca2: "mk", "calling-code": "389" }, { name: "Madagascar", cca2: "mg", "calling-code": "261" }, { name: "Malawi", cca2: "mw", "calling-code": "265" }, { name: "Malaysia", cca2: "my", "calling-code": "60" }, { name: "Maldives", cca2: "mv", "calling-code": "960" }, { name: "Mali", cca2: "ml", "calling-code": "223" }, { name: "Malta", cca2: "mt", "calling-code": "356" }, { name: "Marshall Islands", cca2: "mh", "calling-code": "692" }, { name: "Martinique", cca2: "mq", "calling-code": "596" }, { name: "Mauritania", cca2: "mr", "calling-code": "222" }, { name: "Mauritius", cca2: "mu", "calling-code": "230" }, { name: "Mexico", cca2: "mx", "calling-code": "52" }, { name: "Micronesia", cca2: "fm", "calling-code": "691" }, { name: "Moldova", cca2: "md", "calling-code": "373" }, { name: "Monaco", cca2: "mc", "calling-code": "377" }, { name: "Mongolia", cca2: "mn", "calling-code": "976" }, { name: "Montenegro", cca2: "me", "calling-code": "382" }, { name: "Montserrat", cca2: "ms", "calling-code": "1664" }, { name: "Morocco", cca2: "ma", "calling-code": "212" }, { name: "Mozambique", cca2: "mz", "calling-code": "258" }, { name: "Myanmar (Burma)", cca2: "mm", "calling-code": "95" }, { name: "Namibia", cca2: "na", "calling-code": "264" }, { name: "Nauru", cca2: "nr", "calling-code": "674" }, { name: "Nepal", cca2: "np", "calling-code": "977" }, { name: "Netherlands", cca2: "nl", "calling-code": "31" }, { name: "New Caledonia", cca2: "nc", "calling-code": "687" }, { name: "New Zealand", cca2: "nz", "calling-code": "64" }, { name: "Nicaragua", cca2: "ni", "calling-code": "505" }, { name: "Niger", cca2: "ne", "calling-code": "227" }, { name: "Nigeria", cca2: "ng", "calling-code": "234" }, { name: "North Korea", cca2: "kp", "calling-code": "850" }, { name: "Norway", cca2: "no", "calling-code": "47" }, { name: "Oman", cca2: "om", "calling-code": "968" }, { name: "Pakistan", cca2: "pk", "calling-code": "92" }, { name: "Palau", cca2: "pw", "calling-code": "680" }, { name: "Palestinian Territory", cca2: "ps", "calling-code": "970" }, { name: "Panama", cca2: "pa", "calling-code": "507" }, { name: "Papua New Guinea", cca2: "pg", "calling-code": "675" }, { name: "Paraguay", cca2: "py", "calling-code": "595" }, { name: "Peru", cca2: "pe", "calling-code": "51" }, { name: "Philippines", cca2: "ph", "calling-code": "63" }, { name: "Poland", cca2: "pl", "calling-code": "48" }, { name: "Portugal", cca2: "pt", "calling-code": "351" }, { name: "Puerto Rico", cca2: "pr", "calling-code": "1787" }, { name: "Qatar", cca2: "qa", "calling-code": "974" }, { name: "Réunion", cca2: "re", "calling-code": "262" }, { name: "Romania", cca2: "ro", "calling-code": "40" }, { name: "Russian Federation", cca2: "ru", "calling-code": "7" }, { name: "Rwanda", cca2: "rw", "calling-code": "250" }, { name: "Saint Kitts and Nevis", cca2: "kn", "calling-code": "1869" }, { name: "Saint Lucia", cca2: "lc", "calling-code": "1758" }, { name: "Saint Vincent and the Grenadines", cca2: "vc", "calling-code": "1784" }, { name: "Samoa", cca2: "ws", "calling-code": "685" }, { name: "San Marino", cca2: "sm", "calling-code": "378" }, { name: "São Tomé and Príncipe", cca2: "st", "calling-code": "239" }, { name: "Saudi Arabia", cca2: "sa", "calling-code": "966" }, { name: "Senegal", cca2: "sn", "calling-code": "221" }, { name: "Serbia", cca2: "rs", "calling-code": "381" }, { name: "Seychelles", cca2: "sc", "calling-code": "248" }, { name: "Sierra Leone", cca2: "sl", "calling-code": "232" }, { name: "Singapore", cca2: "sg", "calling-code": "65" }, { name: "Slovakia", cca2: "sk", "calling-code": "421" }, { name: "Slovenia", cca2: "si", "calling-code": "386" }, { name: "Solomon Islands", cca2: "sb", "calling-code": "677" }, { name: "Somalia", cca2: "so", "calling-code": "252" }, { name: "South Africa", cca2: "za", "calling-code": "27" }, { name: "South Korea", cca2: "kr", "calling-code": "82" }, { name: "Spain", cca2: "es", "calling-code": "34" }, { name: "Sri Lanka", cca2: "lk", "calling-code": "94" }, { name: "Sudan", cca2: "sd", "calling-code": "249" }, { name: "Suriname", cca2: "sr", "calling-code": "597" }, { name: "Swaziland", cca2: "sz", "calling-code": "268" }, { name: "Sweden", cca2: "se", "calling-code": "46" }, { name: "Switzerland", cca2: "ch", "calling-code": "41" }, { name: "Syrian Arab Republic", cca2: "sy", "calling-code": "963" }, { name: "Taiwan, Province of China", cca2: "tw", "calling-code": "886" }, { name: "Tajikistan", cca2: "tj", "calling-code": "992" }, { name: "Tanzania", cca2: "tz", "calling-code": "255" }, { name: "Thailand", cca2: "th", "calling-code": "66" }, { name: "Timor-Leste", cca2: "tl", "calling-code": "670" }, { name: "Togo", cca2: "tg", "calling-code": "228" }, { name: "Tonga", cca2: "to", "calling-code": "676" }, { name: "Trinidad and Tobago", cca2: "tt", "calling-code": "1868" }, { name: "Tunisia", cca2: "tn", "calling-code": "216" }, { name: "Turkey", cca2: "tr", "calling-code": "90" }, { name: "Turkmenistan", cca2: "tm", "calling-code": "993" }, { name: "Turks and Caicos Islands", cca2: "tc", "calling-code": "1649" }, { name: "Tuvalu", cca2: "tv", "calling-code": "688" }, { name: "Uganda", cca2: "ug", "calling-code": "256" }, { name: "Ukraine", cca2: "ua", "calling-code": "380" }, { name: "United Arab Emirates", cca2: "ae", "calling-code": "971" }, { name: "United Kingdom", cca2: "gb", "calling-code": "44" }, { name: "United States", cca2: "us", "calling-code": "1" }, { name: "Uruguay", cca2: "uy", "calling-code": "598" }, { name: "Uzbekistan", cca2: "uz", "calling-code": "998" }, { name: "Vanuatu", cca2: "vu", "calling-code": "678" }, { name: "Vatican City", cca2: "va", "calling-code": "379" }, { name: "Venezuela", cca2: "ve", "calling-code": "58" }, { name: "Viet Nam", cca2: "vn", "calling-code": "84" }, { name: "Virgin Islands (British)", cca2: "vg", "calling-code": "1284" }, { name: "Virgin Islands (U.S.)", cca2: "vi", "calling-code": "1340" }, { name: "Western Sahara", cca2: "eh", "calling-code": "212" }, { name: "Yemen", cca2: "ye", "calling-code": "967" }, { name: "Zambia", cca2: "zm", "calling-code": "260" }, { name: "Zimbabwe", cca2: "zw", "calling-code": "263" } ], // JavaScript object mapping dial code to country code. // This is used when the user enters a number, // to quickly look up the corresponding country code. // Originally from http://libphonenumber.googlecode.com/svn/trunk/javascript/i18n/phonenumbers/metadata.js // then I commented some weird 001 entries and added some 4-digit country-code // items at the end e.g. 1246 for Barbados countryCodes: { "1": [ "us", "ca" ], "7": [ "ru", "kz" ], "20": [ "eg" ], "27": [ "za" ], "30": [ "gr" ], "31": [ "nl" ], "32": [ "be" ], "33": [ "fr" ], "34": [ "es" ], "36": [ "hu" ], "39": [ "it" ], "40": [ "ro" ], "41": [ "ch" ], "43": [ "at" ], "44": [ "gb", "gg", "im", "je" ], "45": [ "dk" ], "46": [ "se" ], "47": [ "no", "sj" ], "48": [ "pl" ], "49": [ "de" ], "51": [ "pe" ], "52": [ "mx" ], "53": [ "cu" ], "54": [ "ar" ], "55": [ "br" ], "56": [ "cl" ], "57": [ "co" ], "58": [ "ve" ], "60": [ "my" ], "61": [ "au", "cc", "cx" ], "62": [ "id" ], "63": [ "ph" ], "64": [ "nz" ], "65": [ "sg" ], "66": [ "th" ], "81": [ "jp" ], "82": [ "kr" ], "84": [ "vn" ], "86": [ "cn" ], "90": [ "tr" ], "91": [ "in" ], "92": [ "pk" ], "93": [ "af" ], "94": [ "lk" ], "95": [ "mm" ], "98": [ "ir" ], "211": [ "ss" ], "212": [ "ma", "eh" ], "213": [ "dz" ], "216": [ "tn" ], "218": [ "ly" ], "220": [ "gm" ], "221": [ "sn" ], "222": [ "mr" ], "223": [ "ml" ], "224": [ "gn" ], "225": [ "ci" ], "226": [ "bf" ], "227": [ "ne" ], "228": [ "tg" ], "229": [ "bj" ], "230": [ "mu" ], "231": [ "lr" ], "232": [ "sl" ], "233": [ "gh" ], "234": [ "ng" ], "235": [ "td" ], "236": [ "cf" ], "237": [ "cm" ], "238": [ "cv" ], "239": [ "st" ], "240": [ "gq" ], "241": [ "ga" ], "242": [ "cg" ], "243": [ "cd" ], "244": [ "ao" ], "245": [ "gw" ], "246": [ "io" ], "247": [ "ac" ], "248": [ "sc" ], "249": [ "sd" ], "250": [ "rw" ], "251": [ "et" ], "252": [ "so" ], "253": [ "dj" ], "254": [ "ke" ], "255": [ "tz" ], "256": [ "ug" ], "257": [ "bi" ], "258": [ "mz" ], "260": [ "zm" ], "261": [ "mg" ], "262": [ "re", "yt" ], "263": [ "zw" ], "264": [ "na" ], "265": [ "mw" ], "266": [ "ls" ], "267": [ "bw" ], "268": [ "sz" ], "269": [ "km" ], "290": [ "sh" ], "291": [ "er" ], "297": [ "aw" ], "298": [ "fo" ], "299": [ "gl" ], "350": [ "gi" ], "351": [ "pt" ], "352": [ "lu" ], "353": [ "ie" ], "354": [ "is" ], "355": [ "al" ], "356": [ "mt" ], "357": [ "cy" ], "358": [ "fi", "ax" ], "359": [ "bg" ], "370": [ "lt" ], "371": [ "lv" ], "372": [ "ee" ], "373": [ "md" ], "374": [ "am" ], "375": [ "by" ], "376": [ "ad" ], "377": [ "mc" ], "378": [ "sm" ], "379": [ "va" ], "380": [ "ua" ], "381": [ "rs" ], "382": [ "me" ], "385": [ "hr" ], "386": [ "si" ], "387": [ "ba" ], "389": [ "mk" ], "420": [ "cz" ], "421": [ "sk" ], "423": [ "li" ], "500": [ "fk" ], "501": [ "bz" ], "502": [ "gt" ], "503": [ "sv" ], "504": [ "hn" ], "505": [ "ni" ], "506": [ "cr" ], "507": [ "pa" ], "508": [ "pm" ], "509": [ "ht" ], "590": [ "gp", "bl", "mf" ], "591": [ "bo" ], "592": [ "gy" ], "593": [ "ec" ], "594": [ "gf" ], "595": [ "py" ], "596": [ "mq" ], "597": [ "sr" ], "598": [ "uy" ], "599": [ "cw", "bq" ], "670": [ "tl" ], "672": [ "nf" ], "673": [ "bn" ], "674": [ "nr" ], "675": [ "pg" ], "676": [ "to" ], "677": [ "sb" ], "678": [ "vu" ], "679": [ "fj" ], "680": [ "pw" ], "681": [ "wf" ], "682": [ "ck" ], "683": [ "nu" ], "685": [ "ws" ], "686": [ "ki" ], "687": [ "nc" ], "688": [ "tv" ], "689": [ "pf" ], "690": [ "tk" ], "691": [ "fm" ], "692": [ "mh" ], "850": [ "kp" ], "852": [ "hk" ], "853": [ "mo" ], "855": [ "kh" ], "856": [ "la" ], "880": [ "bd" ], "886": [ "tw" ], "960": [ "mv" ], "961": [ "lb" ], "962": [ "jo" ], "963": [ "sy" ], "964": [ "iq" ], "965": [ "kw" ], "966": [ "sa" ], "967": [ "ye" ], "968": [ "om" ], "970": [ "ps" ], "971": [ "ae" ], "972": [ "il" ], "973": [ "bh" ], "974": [ "qa" ], "975": [ "bt" ], "976": [ "mn" ], "977": [ "np" ], "992": [ "tj" ], "993": [ "tm" ], "994": [ "az" ], "995": [ "ge" ], "996": [ "kg" ], "998": [ "uz" ], "1242": [ "bs" ], "1246": [ "bb" ], "1264": [ "ai" ], "1268": [ "ag" ], "1284": [ "vg" ], "1340": [ "vi" ], "1345": [ "ky" ], "1441": [ "bm" ], "1473": [ "gd" ], "1649": [ "tc" ], "1664": [ "ms" ], "1671": [ "gu" ], "1684": [ "as" ], "1758": [ "lc" ], "1767": [ "dm" ], "1784": [ "vc" ], "1787": [ "pr" ], "1809": [ "do" ], "1868": [ "tt" ], "1869": [ "kn" ], "1876": [ "jm" ] } };